﻿<%@ WebHandler Language="C#" Class="FileUpload" %>

using System;
using System.IO;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Net;
using System.Configuration;
using System.Collections;
using ReportBusiness;

/*
 * Description:MES报表更新
 * Copyright (c) : 通力凯顿（北京）系统集成有限公司
 * Writer:zhunan
 * create Date:2022.12.17
 */

public class FileUpload : IHttpHandler
{
    public bool IsReusable { get { return false; } }
    private uMESReportOracleDAL dal = new uMESReportOracleDAL();
    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.QueryString["action"].ToString() == "upload")
        {
            context.Response.ContentType = "application/json";
            string root = HttpContext.Current.Request.PhysicalApplicationPath;
            try
            {
                HttpFileCollection Files = HttpContext.Current.Request.Files;// 多个文件
                string date = HttpContext.Current.Request.Form["date"].ToString(); //日期
                string path = HttpContext.Current.Request.Form["path"].ToString(); //路径
                string FilePath = "";
                if (path == "root")
                {
                    FilePath = root;
                }
                else
                {
                    FilePath = root + path + "\\";// 文件路径
                }

                //服务器路径不存在
                if (!Directory.Exists(FilePath))
                {
                    context.Response.Write(JsonConvert.SerializeObject(new { status = 404, msg = "路径不存在" }));
                    return;
                }

                foreach (string strFile in Files)
                {
                    HttpPostedFile uploadFile = Files[strFile];// 用key获取单个文件对象HttpPostedFile
                    string fileName = uploadFile.FileName.Split('.')[0];//文件名称
                    string fileExt = uploadFile.FileName.Split('.')[1];//文件后缀

                    /* 用户上传的文件已存在，会执行：
                     * 1.保存更新文件
                     * 2.保存备份文件
                     * 3.替换旧文件
                     */
                    if (File.Exists(FilePath + uploadFile.FileName))
                    {
                        //判断是否存在【更新文件】文件夹
                        if (!Directory.Exists(root + "更新文件\\"))
                        {
                            Directory.CreateDirectory(root + "更新文件\\");//创建【更新文件】文件夹
                        }

                        string updatePath = root + "更新文件\\" + date + "\\";

                        //判断【更新文件】文件夹下是否存在以当前日期命名的文件夹
                        if (!Directory.Exists(updatePath))
                        {
                            Directory.CreateDirectory(updatePath);//创建以当前日期命名的文件夹
                        }

                        uploadFile.SaveAs(updatePath + fileName + "(" + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒") + "更新)." + fileExt);//1.保存更新文件

                        string backupFile = FilePath + uploadFile.FileName;//需要被备份的文件
                        FileInfo file = new FileInfo(backupFile);
                        if (file.Exists)
                        {
                            //是否存在【备份文件】文件夹
                            if (!Directory.Exists(root + "备份文件\\"))
                            {
                                Directory.CreateDirectory(root + "备份文件\\");//创建【备份文件】文件夹
                            }

                            string backupPath = root + "备份文件\\" + date + "\\";

                            //【备份文件】文件夹下是否存在以当前日期命名的文件夹
                            if (!Directory.Exists(backupPath))
                            {
                                Directory.CreateDirectory(backupPath);//在【备份文件】文件夹下创建以当前日期命名的文件夹
                            }

                            file.CopyTo(backupPath + fileName + "(" + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒") + "备份)." + fileExt, true);//2.保存备份文件
                        }

                        uploadFile.SaveAs(FilePath + uploadFile.FileName);//3.替换旧文件
                    }
                    else //用户上传的文件不存在，会执行：1.保存至更新文件 2.保存文件
                    {
                        //判断是否存在【更新文件】文件夹
                        if (!Directory.Exists(root + "更新文件\\"))
                        {
                            Directory.CreateDirectory(root + "更新文件\\");//创建【更新文件】文件夹
                        }
                        string updatePath = root + "更新文件\\" + date + "\\";
                        //判断【更新文件】文件夹下是否存在以当前日期命名的文件夹
                        if (!Directory.Exists(updatePath))
                        {
                            Directory.CreateDirectory(updatePath);//创建以当前日期命名的文件夹
                        }

                        string fullDestFileName = fileName + "(" + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒") + "更新)." + fileExt;
                        uploadFile.SaveAs(updatePath + fullDestFileName);//1.保存至更新文件
                        uploadFile.SaveAs(FilePath + uploadFile.FileName);//2.保存文件
                    }
                    context.Response.Write(JsonConvert.SerializeObject(new { status = 200, msg = Files[strFile].FileName + " 保存成功" }));
                }
            }
            catch (Exception e)
            {
                context.Response.Write(JsonConvert.SerializeObject(new { status = 500, msg = e.Message }));
            }
        }
    }
}